<?php

/**
 * File:        route.php
 * 路由分发类
 *
 * @author      Xia Lijun   /   Liu Rui
 * @date        2019/7/27
 * @version     V1.0
 */

class Route
{
    /**
     * 路由分发启动
     * 并执行对应的方法
     * @param string $query_url 接收传送过来的参数
     */
    public static function start(string $query_url)
    {
        // 开始解析 URL
        $args_arr = Route::parseUrl($query_url);
        // 1、 查看rid是否存在
        if (array_key_exists($args_arr['rid'], ROUTE)) {
            // 2、获取rid中的类名称
            $route_res = ROUTE[$args_arr['rid']];
            // 3、new 一个类出来
            $class = RegisterUtils::get($route_res['controller']);
            // 4、获取rid中的方法名
            $func = $route_res['act'];
            // 5、判断类中的方法是否存在
            if (!method_exists($class, $func)) {
                exit(Utils::makeResponse('route_0x0002', "类中的 $func 方法不存在"));
            } else {
                if (is_callable(array($class, $func))) {
                    // 5、调用方法
                    $class->$func($args_arr);
                }
            }
        } else {
            exit(Utils::makeResponse('route_0x0003', 'rid中的方法不存在'));
        }
    }

    /**
     * 解析 URL 中的参数为数组
     * @param string $array_query 接收传送过来的参数
     * @return array 返回解析后的数组
     */
    private static function parseUrl(string $array_query): array
    {
        $queryParts = explode('&', $array_query);
        $params = array();
        foreach ($queryParts as $param) {
            $item = explode('=', $param);
            $params[$item[0]] = $item[1];
        }
        return $params;
    }
}
